perm filename NPROM.FAI[CMS,LCS]1 blob sn#336463 filedate 1978-02-23 generic text, type T, neo UTF8
00100	;	NEW MONITOR AND BOOTSTRAP PROM.
00200	
00300		.INSERT ASMBL.FAI
00400	   UNDEF←377
00500	
00600	; ZPAGE RAM
00700	
00800	TFLG:	0
00900	VAL:	0
01000	ADR:	0
01100		0
01200	
01300		BLOCK 15	;OLD DDT RAM
01400	
01500	CUR:	0
01600		0
01700	BRCODE:	0
01800	RSCODE:	0
01900	KBCODE:	0
     

00100	;RESET
00200	LOC 177274	;LOC 177000
00300	   DSKSEL←176437;Floppy select
00400	RST:	LDAI	34	;Unload disk head and reset
00500		STA	DSKSEL	;Check this for restore timing.
00600	
00700	   RSTREG←UNDEF	;POWER ON RESET REG
00800	   PORBIT←UNDEF	;POWER ON RESET BIT
00900		LDA	RSTREG	;CHECK FOR POWER ON RESET
01000		ANDI	PORBIT
01100		BNE	MANUAL	;NOT POWER ON
01200	
01300		JSR	RSTAK	;Reset stack and decimal mode
01400	
01500	;Stack and decimal mode reset
01600	   PDP←377	;STACK DEPTH
01700	RSTAK:	LDXI	PDP	;Get stack depth.
01800		TXS
01900		CLD		;CLEAR DECIMAL MODE
02000		RTS
02100	
02200	;SETUP INTERUPT VECTORS
02300	   IVECT←176360	;RAM INTERUPT VECTOR TABLE ADDRESS
02400		LDXI	17
02500	IVSET:	LDAX	IVDEF	;Default vector setup loop
02600		STAX	IVECT
02700		DEX
02800		BPL	IVSET
02900	
03000	   PRIC←176436	;PRI CONTROL REGISTER ADDRESS
03100		LDAI	UNDEF	;SETUP PRI CONTROL REGISTER
03200		STA	PRIC
     

00100	;SETUP DMA
00200	   FDMAA←176400	;FDSK DMA ADDRESS REGISTER
00300	   FDMAC←176401	;FDSK COUNT REGISTER
00400	   DMACON←176410;DMA COMMAND REGISTER
00500		LDAI	0	;RESET DMA
00600		STA	DMACON
00700		STA	FDMAA	;SETUP DMA ADDRESS
00800		LDAI	2	;1000
00900		STA	FDMAA
01000		LDAI	377	;SETUP DMA COUNT
01100		STA	FDMAC
01200		LDAI	201	;CNT=512-1
01300		STA	FDMAC
01400		LDAI	141	;ENABLE FDSK DMA
01500	
01600	;Enable disk
01700		LDAI	24	;24 = Head unloaded and
01800		STA	DSKSEL	;disk init enabled.
01900	
02000	   FDSKC←176420	;DISK COMMAND REGISTER
02100	   FDSKT←176421	;DISK TRACK REGISTER
02200	   FDSKS←176422	;DISK SECTOR REGISTER
02300	   FDSKD←176423	;DISK DATA REGISTER
02400		LDAI	UNDEF	;READ FROM DISK
02500		STA	FDSKC
02600	
02700	;  WAIT FOR INTERUPT
02800	IWAIT:	BNE	IWAIT	;BOOT
     

00100	;START
00200	   BOOTS←1000	;BOOTSTRAP START ADDRESS
00300	DMAINT:
00400	DSKINT:	
00500		JMP	BOOTS	;JUMP TO BOOT START
00600	
00700	;Default interupt vectors.
00800	IVDEF:	IVERR	;Error
00900		PROM
01000		IVERR	;Error
01100		PROM
01200		UNLOAD	;Disable head preload
01300		PROM
01400		MODINT	;TTY default
01500		PROM
01600		DMAINT	;Disk load and boot
01700		PROM
01800		DSKINT	;Disk load and boot
01900		PROM
02000		IVERR	;Error
02100	
     

00100	;MANUAL RESET
00200	MANUAL:	
00300		JSR	RCDPY	;Reset chr dpy
00400		JSR	RMOD	;Reset BRATE, ACIA, and modem.
00500	
00600	;Reset chr dpy
00700	RCDPY:	LDAI	0	;Reset cursor
00800		STAZ	CUR
00900		LDAI	DPYRAM
01000		STAZ	CUR+1
01100	
01200	   RASTER←171760;RASTER OFFSET
01300		LDAI	14	;SET UP DPY DEFAULTS
01400		STA	RASTER	;SHOULD BE 0,0
01500	   CHRROW←171761;CHR ROW OFFSET
01600		LDAI	377
01700		STA	CHRROW
01800	   DPYC←171764	;VIDIO CONTROL
01900		LDAI	100	;CURSOR ENABLE
02000		STA	DPYC
02100	   VMIX←171765	;VIDIO MIXER
02200		LDAI	1	;NORMAL MIX
02300		STA	VMIX
02400		RTS
02500	
02600	;RESET BRATE AND ACIA DEFAULTS
02700	   RSDEF←25	;ACIA CONTROL DEFAULT
02800	RMOD:	LDAI	15	;Set bit rate to 300
02900		STAZ	BRCODE
03000		LDAI	RSDEF	;SETUP ACIA DEFAULT
03100		STAZ	RSCODE
03200		RTS
03300	
03400	;RESET KEY BOARD DEFAULTS
03500	   KBD←173370	;KB DATA REGISTER
03600	   KBC←173371	;KB CONTROL REGISTER
03700		LDAI	UNDEF	;RESET KB DEFAULT
03800		STAZ	KBCODE
     

00100	;DPY DDT LOOP
00200	PCR:	LDAI	15	;PRINT <cr>.
00300		JSR	PCHR
00400	PLF:	LDAI	12
00500		JSR	PCHR	;PRINT <cr>
00600	GNEXT:	JSR	GCHR	;Wait for next chr
00700		ANDI	177
00800	
00900	ECHO:	JSR	PCHR	;Echo it
01000	
01100		JMP	GNEXT	;Wait for next chr
01200	
     

00100	;PRINT ADDRESS/VAL
00200	PAV:	LDXI	0
00300		LDAI	1	;# OF DIGITS
00400		STAZ	NDIG
00500		STAZ	TFLG	;SET BIT MASK
00600		LDYI	2	;# OF BITS + C
00700		JSR	RLOOP	;PRINT "0" OR "1"
00800		LDAI	5
00900		STAZ	NDIG
01000		LDAI	7
01100		STAZ	TFLG
01200		JSR	CLOOP	;PRINT 5 OCTAL DIGITS
01300		LDAI	"/"
01400		JSR	PCHR	;PRINT "/"
01500		LDAI	1
01600		STAZ	NDIG
01700		LDYI	3
01800		STYZ	TFLG
01900		JSR	DLOOP	;PRINT "0" - "3"
02000		LDAI	2
02100		STAZ	NDIG
02200		LDAI	7
02300		STAZ	TFLG
02400		JSR	CLOOP	;PRINT 2 OCTAL DIGITS
02500		RTS
02600	
02700	CLOOP:	LDYI	3	;FOR 3 BITS PER DIGIT
02800	RLOOP:	ROLZ	VAL	;ROTATE ADDRESS AND VALUE
02900		ROLZ	ADR
03000		ROLZ	ADR+1
03100	DLOOP:	DEY
03200		BNE	RLOOP
03300		LDAZ	VAL	;GET NEXT DIGIT
03400		ANDZ	TFLG
03500		ORAI	60	;CONVERT TO ASCII
03600		JSR	PCHR	;PRINT IT
03700		DECZ	NDIG
03800		BNE	CLOOP	;NEXT DIGIT
03900		RTS
     

00100	;PRINT CHR
00200	PCHR:	
00300		STAIX	CUR	;WRITE CHR INTO CHRDPY MEM
00400	
00500		INCZ	CUR	;INCREMENT CURSOR
00600		LDAZ	CUR
00700		ANDI	77	;CHECK IF OFF RIGHT EDGE
00800		BEQ	CRLF	;CLEAR NEXT LINE
00900	
01000	   CURREG←171762	;CURSOR CONTROL REGISTERS
01100		LDAZ	CUR	;UPDATE CURSOR
01200		STA	CURREG
01300		LDAZ	CUR+1
01400		STA	CURREG+1
01500		RTS
01600	
01700	CRLF:	DECZ	CUR	;FIX CURSOR
01800		LDAZ	CUR
01900		ANDI	300	;<CR>
02000		STAZ	CUR
02100		JMP	LF	;<LF>
02200	
02300	;LINE FEED
02400	LF:	CLC
02500		LDAZ	CUR
02600		ADCI	100	;NEXT LINE
02700		STAZ	CUR
02800		BCC	NOTOFF
02900		INCZ	CUR+1
03000		LDAZ	CUR+1
03100		CMPI	ED	;BOTTOM OF SCREEN
03200		BEQ	GLITCH
03300	
03400	CTEOL:	TYA	;SAVE Y
03500		PHA
03600		LDAZ	CUR
03700		ANDI	77
03800		EORI	77
03900		TAY
04000		LDAI	40	;<space>
04100	CLR:	STAIY	CUR
04200		DEY
04300		BNE	CLR
     

00100	;Paper tape loader
00200	PTLOAD:	
00300	
     

00100	;Prom reset and interupt vectors
00200	   LOC 200266	;LOC 177772
00300	
00400	NMIV:	NMIINT	;Prom Non maskable interupt vector
00500		PROM
00600	
00700	RSTV:	RST	;Prom reset vector
00800		PROM
00900	
01000	   IRQINT←0	;0 For vector enable
01100	IRQV:	IRQINT	;Prom interupt request vector
01200		IRQINT
01300	END